package com.tom.abstractcode.test4;

import java.util.ArrayList;
import java.util.List;

/**
 * @author zx
 * @date 2024年12月20日 10:18
 */
public class RequestFuture {

    private List<RequestFutureListener> requestFutureListenerList;

    public RequestFuture() {
        this.requestFutureListenerList = new ArrayList<>();
    }

    public void onComplete(String s){
        // 假设只执行成功的方法
        fireSuccess(s);
    }


    private void fireSuccess(String s) {
        // 假设只执行成功的方法
        requestFutureListenerList.forEach(requestFutureListener -> requestFutureListener.onSuccess(s));
    }



    /**
     * 相当于给RequestFuture addListener
     */
    public RequestFuture compose(ResponseHandleAdapter responseHandleAdapter){
        // 这里实现将结果传播出去的关键代码，执行完各个responseHandleAdapter后，
        // 链式的执行调用compose方法，调用compose方法会添加一个listener

        final RequestFuture future = new RequestFuture();
        addListener(new RequestFutureListener() {
            @Override
            public void onSuccess(String s) {
                // 交回给各个请求处理类处理
                responseHandleAdapter.onSuccess(s,future);
            }

            @Override
            public void onFail() {
                // 暂时不处理
            }
        });
        return future;
    }

    public  void addListener(RequestFutureListener requestFutureListener){
        requestFutureListenerList.add(requestFutureListener);
    }

}
